草庐IT

C++ unique_ptr 和映射

全部标签

c++ - 一个简单的 std::shared_ptr 构造案例的段错误

来自cppreference我了解到std::shared_ptr有一个构造函数:templateexplicitshared_ptr(Y*ptr);然后我试了一段代码如下:#include#include#includeintmain(void){///block1{std::shared_ptrs1(newstd::string("good"));std::shared_ptrs2(s1.get());///s2std::cerri1(newint(1));std::shared_ptri2(i1.get());///i2std::cerr它会导致block1的段错误,但不会导致b

c++ - 放置指向 shared_ptr 的多重映射的指针不起作用

vector工作正常Headerstd::vector>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p){subnodes_m.emplace_back(subnode_p);}multimap没有Headerstd::multimap>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p,unsignedintlayerIndex){subnodes_m.emplace(layerIndex,

c++ - 当shared_ptr,当unique_ptr

这个问题在这里已经有了答案:Differencesbetweenunique_ptrandshared_ptr[duplicate](4个答案)关闭7年前。什么时候应该使用shared_ptr什么时候使用unique_ptr?例如在这个类中而不是node*应该是shared_ptr或unique_ptr。它取决于什么?classnode{private:node*parent;vectorchildren;/**txny*x-numerdrzewa*y-numerwezla*/stringid;typeNodetype;//0-term,1-funcpublic:node(node*p

c++ - .containsKey() 用于 C++ 映射的方法

我想省去一些重复的工作,写一个模仿Java的函数.containsKey()方法。基本上我想要这样的东西:usingnamespacestd;mapmymap;if(!contains(mymap,"keyasstring"))cout在C++中,可以通过以下方式检查映射是否包含键:m.find(str)!=m.end();我想编写一个通用方法,如果键包含在映射中则返回true。到目前为止,我有以下内容:templateinlineboolcontains(conststd::mapm,constA&str){returnm.find(str)!=m.end();}当我在map上运行它

Python 支持排序字典——类似于 C++ 映射?

我正在使用Python2.7.x。我有一本字典(我的意思是{}),键是int,值是字符串。我想检索具有最小整数值的键。在C++中,我认为我们可以使用map,它对键进行排序。在Python中,不确定我们是否可以利用类似的东西?如果我的理解是正确的,Python字典(我的意思是{})不是按键排序的。提前致谢,林 最佳答案 更新OP在查找字典中的最小键时表示需要O(1)性能。试试sortedcontainers模块。它提供了一个SortedDict类:>>>fromsortedcontainersimportSortedDict>>>d=

c++ weak_ptr在取消引用后过期?

我是智能指针的新手,我正在思考为什么weak_ptr在取消引用运算符后会过期。我用来测试的代码在这里:#include#include#includeusingnamespacestd;structnode{weak_ptrparent;shared_ptrchild;intval;};shared_ptrfoo(){shared_ptra=make_shared();shared_ptrb=make_shared();a->val=30;b->val=20;b->parent=a;a->child=b;returna;}intmain(){shared_ptrc=foo();node

c++ - 为什么我不能在 C++ 中映射结构?

我已经声明了这样的结构->structdata{intx,y;booloperator现在我想映射它作为一个键和一个bool值。intmain(){dataa;mapmp;a.x=12,a.y=24;mp[a]=true;}最后一行给我这个错误->error:passing'const'as'this'argumentof'booldata::operator我该如何解决这个问题?? 最佳答案 std::map在内部将它们存储为std::map.这里重要的是Key是const.因此,在您的示例中,data是const,但是opera

c++ - 如何通过 unsigned long 将 std::shared_ptr 传递给回调?

我有一个旧的C风格库,它使用带有unsignedlong作为用户参数的回调,我想将我的shared_ptr传递给回调,以便增加引用计数。voidcallback(unsignedlongarg){std::shared_ptrptr=???arg???}voidstarter_function(){std::shared_ptrptr=std::make_shared();unsignedlongarg=???ptr???//passtolibrarysoitmaybeusedbycallback}目前我在shared_ptr上使用get(),然后使用C风格的强制转换,但这会在star

c++ - 将 std::unique_ptr 重置为指向数组的指针有什么问题?

我看到如下代码片段:std::unique_ptrmCache;mCache.reset(newuint8_t[size]);有人告诉我这段代码有一些问题。谁能给我一些细节? 最佳答案 给定std::unique_ptrmCache;,当mCache被摧毁了它的deleter将使用delete销毁被管理的指针(如果有的话),即为单个对象释放内存。但是在mCache.reset(newuint8_t[size]);之后什么mCachemanages是指向数组的指针,这意味着它应该使用delete[]反而;使用delete为数组释放内存

c++ - 从列表中删除 boost::shared_ptr 的正确方法是什么?

我有一个std::list的boost::shared_ptr我想从中删除一个项目,但我只有一个T*类型的指针,它与列表中的一个项目匹配。但是我不能使用myList.remove(tPtr)我猜是因为shared_ptr没有实现==为其模板参数类型。我的直接想法是尝试myList.remove(shared_ptr(tPtr))这在语法上是正确的,但它会因临时shared_ptr后的双重删除而崩溃有一个单独的use_count。std::list>myList;T*tThisPtr=newT();//Thisiswrong;onlydoneforexamplecode.//stand-